package org.gzr.myreflect.getmethods;

import org.gzr.myreflect.getmethods.entity.Student;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 获取成员方法并运行
 * Object c(Object obj, Object... args) ：运行方法
 *
 * 参数一：用obj对象调用该方法
 *
 * 参数二：调用方法的传递的参数（如果没有就不写）
 *
 * 返回值：方法的返回值（如果没有就不写）
 */
public class MyInvoke {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        //1.获取字节码对象
        Class<?> aClass = Class.forName("org.gzr.myreflect.getmethods.entity.Student");

        //2.获取一个对象
        Student student = new Student();

        //获取一个指定的方法
        Method eatMethod = aClass.getMethod("eat", String.class);

        //运行
        //参数一：表示方法的调用对象
        //参数二：方法在运行时需要的实际参数
        //注意点：如果方法有返回值，那么需要接收invoke的结果
        //如果方法没有返回值，则不需要接收

        String result = (String) eatMethod.invoke(student,"重庆小面");
        System.out.println(result);

    }
}
